/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package bpmn.provider;

import bpmn.util.BpmnAdapterFactory;

import java.util.ArrayList;
import java.util.Collection;

import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;

import org.eclipse.emf.edit.provider.ChangeNotifier;
import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IChangeNotifier;
import org.eclipse.emf.edit.provider.IDisposable;
import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.provider.IItemPropertySource;
import org.eclipse.emf.edit.provider.INotifyChangedListener;
import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

/**
 * This is the factory that is used to provide the interfaces needed to support Viewers.
 * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
 * The adapters also support Eclipse property sheets.
 * Note that most of the adapters are shared among multiple instances.
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public class BpmnItemProviderAdapterFactory extends BpmnAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
	/**
	 * This keeps track of the root adapter factory that delegates to this adapter factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ComposedAdapterFactory parentAdapterFactory;

	/**
	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected IChangeNotifier changeNotifier = new ChangeNotifier();

	/**
	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected Collection<Object> supportedTypes = new ArrayList<Object>();

	/**
	 * This constructs an instance.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public BpmnItemProviderAdapterFactory() {
		supportedTypes.add(IEditingDomainItemProvider.class);
		supportedTypes.add(IStructuredItemContentProvider.class);
		supportedTypes.add(ITreeItemContentProvider.class);
		supportedTypes.add(IItemLabelProvider.class);
		supportedTypes.add(IItemPropertySource.class);
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.AdHocProcess} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected AdHocProcessItemProvider adHocProcessItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.AdHocProcess}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createAdHocProcessAdapter() {
		if (adHocProcessItemProvider == null) {
			adHocProcessItemProvider = new AdHocProcessItemProvider(this);
		}

		return adHocProcessItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Annotation} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected AnnotationItemProvider annotationItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Annotation}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createAnnotationAdapter() {
		if (annotationItemProvider == null) {
			annotationItemProvider = new AnnotationItemProvider(this);
		}

		return annotationItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.ArtifactInput} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ArtifactInputItemProvider artifactInputItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.ArtifactInput}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createArtifactInputAdapter() {
		if (artifactInputItemProvider == null) {
			artifactInputItemProvider = new ArtifactInputItemProvider(this);
		}

		return artifactInputItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.ArtifactOutput} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ArtifactOutputItemProvider artifactOutputItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.ArtifactOutput}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createArtifactOutputAdapter() {
		if (artifactOutputItemProvider == null) {
			artifactOutputItemProvider = new ArtifactOutputItemProvider(this);
		}

		return artifactOutputItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Assignment} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected AssignmentItemProvider assignmentItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Assignment}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createAssignmentAdapter() {
		if (assignmentItemProvider == null) {
			assignmentItemProvider = new AssignmentItemProvider(this);
		}

		return assignmentItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Association} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected AssociationItemProvider associationItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Association}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createAssociationAdapter() {
		if (associationItemProvider == null) {
			associationItemProvider = new AssociationItemProvider(this);
		}

		return associationItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.BusinessProcessDiagram} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected BusinessProcessDiagramItemProvider businessProcessDiagramItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.BusinessProcessDiagram}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createBusinessProcessDiagramAdapter() {
		if (businessProcessDiagramItemProvider == null) {
			businessProcessDiagramItemProvider = new BusinessProcessDiagramItemProvider(this);
		}

		return businessProcessDiagramItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Cancel} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected CancelItemProvider cancelItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Cancel}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createCancelAdapter() {
		if (cancelItemProvider == null) {
			cancelItemProvider = new CancelItemProvider(this);
		}

		return cancelItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Category} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected CategoryItemProvider categoryItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Category}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createCategoryAdapter() {
		if (categoryItemProvider == null) {
			categoryItemProvider = new CategoryItemProvider(this);
		}

		return categoryItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Compensate} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected CompensateItemProvider compensateItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Compensate}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createCompensateAdapter() {
		if (compensateItemProvider == null) {
			compensateItemProvider = new CompensateItemProvider(this);
		}

		return compensateItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Complex} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ComplexItemProvider complexItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Complex}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createComplexAdapter() {
		if (complexItemProvider == null) {
			complexItemProvider = new ComplexItemProvider(this);
		}

		return complexItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Condition} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ConditionItemProvider conditionItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Condition}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createConditionAdapter() {
		if (conditionItemProvider == null) {
			conditionItemProvider = new ConditionItemProvider(this);
		}

		return conditionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Conditional} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ConditionalItemProvider conditionalItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Conditional}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createConditionalAdapter() {
		if (conditionalItemProvider == null) {
			conditionalItemProvider = new ConditionalItemProvider(this);
		}

		return conditionalItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.DataBased} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DataBasedItemProvider dataBasedItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.DataBased}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createDataBasedAdapter() {
		if (dataBasedItemProvider == null) {
			dataBasedItemProvider = new DataBasedItemProvider(this);
		}

		return dataBasedItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.DataObject} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DataObjectItemProvider dataObjectItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.DataObject}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createDataObjectAdapter() {
		if (dataObjectItemProvider == null) {
			dataObjectItemProvider = new DataObjectItemProvider(this);
		}

		return dataObjectItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Embedded} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected EmbeddedItemProvider embeddedItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Embedded}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createEmbeddedAdapter() {
		if (embeddedItemProvider == null) {
			embeddedItemProvider = new EmbeddedItemProvider(this);
		}

		return embeddedItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.End} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected EndItemProvider endItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.End}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createEndAdapter() {
		if (endItemProvider == null) {
			endItemProvider = new EndItemProvider(this);
		}

		return endItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Entity} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected EntityItemProvider entityItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Entity}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createEntityAdapter() {
		if (entityItemProvider == null) {
			entityItemProvider = new EntityItemProvider(this);
		}

		return entityItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Error} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ErrorItemProvider errorItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Error}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createErrorAdapter() {
		if (errorItemProvider == null) {
			errorItemProvider = new ErrorItemProvider(this);
		}

		return errorItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.EventBased} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected EventBasedItemProvider eventBasedItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.EventBased}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createEventBasedAdapter() {
		if (eventBasedItemProvider == null) {
			eventBasedItemProvider = new EventBasedItemProvider(this);
		}

		return eventBasedItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Exclusive} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ExclusiveItemProvider exclusiveItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Exclusive}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createExclusiveAdapter() {
		if (exclusiveItemProvider == null) {
			exclusiveItemProvider = new ExclusiveItemProvider(this);
		}

		return exclusiveItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Expression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ExpressionItemProvider expressionItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Expression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createExpressionAdapter() {
		if (expressionItemProvider == null) {
			expressionItemProvider = new ExpressionItemProvider(this);
		}

		return expressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Gate} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected GateItemProvider gateItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Gate}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createGateAdapter() {
		if (gateItemProvider == null) {
			gateItemProvider = new GateItemProvider(this);
		}

		return gateItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Group} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected GroupItemProvider groupItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Group}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createGroupAdapter() {
		if (groupItemProvider == null) {
			groupItemProvider = new GroupItemProvider(this);
		}

		return groupItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Inclusive} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected InclusiveItemProvider inclusiveItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Inclusive}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createInclusiveAdapter() {
		if (inclusiveItemProvider == null) {
			inclusiveItemProvider = new InclusiveItemProvider(this);
		}

		return inclusiveItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.InputSet} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected InputSetItemProvider inputSetItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.InputSet}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createInputSetAdapter() {
		if (inputSetItemProvider == null) {
			inputSetItemProvider = new InputSetItemProvider(this);
		}

		return inputSetItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Intermediate} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected IntermediateItemProvider intermediateItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Intermediate}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createIntermediateAdapter() {
		if (intermediateItemProvider == null) {
			intermediateItemProvider = new IntermediateItemProvider(this);
		}

		return intermediateItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Lane} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected LaneItemProvider laneItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Lane}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createLaneAdapter() {
		if (laneItemProvider == null) {
			laneItemProvider = new LaneItemProvider(this);
		}

		return laneItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Link} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected LinkItemProvider linkItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Link}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createLinkAdapter() {
		if (linkItemProvider == null) {
			linkItemProvider = new LinkItemProvider(this);
		}

		return linkItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Manual} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ManualItemProvider manualItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Manual}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createManualAdapter() {
		if (manualItemProvider == null) {
			manualItemProvider = new ManualItemProvider(this);
		}

		return manualItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.MessageEvent} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MessageEventItemProvider messageEventItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.MessageEvent}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMessageEventAdapter() {
		if (messageEventItemProvider == null) {
			messageEventItemProvider = new MessageEventItemProvider(this);
		}

		return messageEventItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Message} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MessageItemProvider messageItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Message}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMessageAdapter() {
		if (messageItemProvider == null) {
			messageItemProvider = new MessageItemProvider(this);
		}

		return messageItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.MessageFlow} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MessageFlowItemProvider messageFlowItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.MessageFlow}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMessageFlowAdapter() {
		if (messageFlowItemProvider == null) {
			messageFlowItemProvider = new MessageFlowItemProvider(this);
		}

		return messageFlowItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.MultiInstanceLoopActivity} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MultiInstanceLoopActivityItemProvider multiInstanceLoopActivityItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.MultiInstanceLoopActivity}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMultiInstanceLoopActivityAdapter() {
		if (multiInstanceLoopActivityItemProvider == null) {
			multiInstanceLoopActivityItemProvider = new MultiInstanceLoopActivityItemProvider(this);
		}

		return multiInstanceLoopActivityItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.None} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected NoneItemProvider noneItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.None}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createNoneAdapter() {
		if (noneItemProvider == null) {
			noneItemProvider = new NoneItemProvider(this);
		}

		return noneItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.OutputSet} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected OutputSetItemProvider outputSetItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.OutputSet}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createOutputSetAdapter() {
		if (outputSetItemProvider == null) {
			outputSetItemProvider = new OutputSetItemProvider(this);
		}

		return outputSetItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Parallel} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ParallelItemProvider parallelItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Parallel}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createParallelAdapter() {
		if (parallelItemProvider == null) {
			parallelItemProvider = new ParallelItemProvider(this);
		}

		return parallelItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Participant} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ParticipantItemProvider participantItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Participant}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createParticipantAdapter() {
		if (participantItemProvider == null) {
			participantItemProvider = new ParticipantItemProvider(this);
		}

		return participantItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Pool} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected PoolItemProvider poolItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Pool}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createPoolAdapter() {
		if (poolItemProvider == null) {
			poolItemProvider = new PoolItemProvider(this);
		}

		return poolItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Process} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ProcessItemProvider processItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Process}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createProcessAdapter() {
		if (processItemProvider == null) {
			processItemProvider = new ProcessItemProvider(this);
		}

		return processItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Property} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected PropertyItemProvider propertyItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Property}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createPropertyAdapter() {
		if (propertyItemProvider == null) {
			propertyItemProvider = new PropertyItemProvider(this);
		}

		return propertyItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Receive} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ReceiveItemProvider receiveItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Receive}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createReceiveAdapter() {
		if (receiveItemProvider == null) {
			receiveItemProvider = new ReceiveItemProvider(this);
		}

		return receiveItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.ReferenceSubProcess} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ReferenceSubProcessItemProvider referenceSubProcessItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.ReferenceSubProcess}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createReferenceSubProcessAdapter() {
		if (referenceSubProcessItemProvider == null) {
			referenceSubProcessItemProvider = new ReferenceSubProcessItemProvider(this);
		}

		return referenceSubProcessItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.ReferenceTask} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ReferenceTaskItemProvider referenceTaskItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.ReferenceTask}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createReferenceTaskAdapter() {
		if (referenceTaskItemProvider == null) {
			referenceTaskItemProvider = new ReferenceTaskItemProvider(this);
		}

		return referenceTaskItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Reusable} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ReusableItemProvider reusableItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Reusable}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createReusableAdapter() {
		if (reusableItemProvider == null) {
			reusableItemProvider = new ReusableItemProvider(this);
		}

		return reusableItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Role} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected RoleItemProvider roleItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Role}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createRoleAdapter() {
		if (roleItemProvider == null) {
			roleItemProvider = new RoleItemProvider(this);
		}

		return roleItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Script} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ScriptItemProvider scriptItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Script}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createScriptAdapter() {
		if (scriptItemProvider == null) {
			scriptItemProvider = new ScriptItemProvider(this);
		}

		return scriptItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Send} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected SendItemProvider sendItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Send}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createSendAdapter() {
		if (sendItemProvider == null) {
			sendItemProvider = new SendItemProvider(this);
		}

		return sendItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.SequenceFlow} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected SequenceFlowItemProvider sequenceFlowItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.SequenceFlow}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createSequenceFlowAdapter() {
		if (sequenceFlowItemProvider == null) {
			sequenceFlowItemProvider = new SequenceFlowItemProvider(this);
		}

		return sequenceFlowItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Service} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ServiceItemProvider serviceItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Service}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createServiceAdapter() {
		if (serviceItemProvider == null) {
			serviceItemProvider = new ServiceItemProvider(this);
		}

		return serviceItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Signal} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected SignalItemProvider signalItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Signal}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createSignalAdapter() {
		if (signalItemProvider == null) {
			signalItemProvider = new SignalItemProvider(this);
		}

		return signalItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.StandardLoopActivity} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected StandardLoopActivityItemProvider standardLoopActivityItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.StandardLoopActivity}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createStandardLoopActivityAdapter() {
		if (standardLoopActivityItemProvider == null) {
			standardLoopActivityItemProvider = new StandardLoopActivityItemProvider(this);
		}

		return standardLoopActivityItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Start} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected StartItemProvider startItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Start}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createStartAdapter() {
		if (startItemProvider == null) {
			startItemProvider = new StartItemProvider(this);
		}

		return startItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.SubProcess} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected SubProcessItemProvider subProcessItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.SubProcess}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createSubProcessAdapter() {
		if (subProcessItemProvider == null) {
			subProcessItemProvider = new SubProcessItemProvider(this);
		}

		return subProcessItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Task} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected TaskItemProvider taskItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Task}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createTaskAdapter() {
		if (taskItemProvider == null) {
			taskItemProvider = new TaskItemProvider(this);
		}

		return taskItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Terminate} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected TerminateItemProvider terminateItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Terminate}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createTerminateAdapter() {
		if (terminateItemProvider == null) {
			terminateItemProvider = new TerminateItemProvider(this);
		}

		return terminateItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.TimeDateExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected TimeDateExpressionItemProvider timeDateExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.TimeDateExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createTimeDateExpressionAdapter() {
		if (timeDateExpressionItemProvider == null) {
			timeDateExpressionItemProvider = new TimeDateExpressionItemProvider(this);
		}

		return timeDateExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Timer} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected TimerItemProvider timerItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Timer}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createTimerAdapter() {
		if (timerItemProvider == null) {
			timerItemProvider = new TimerItemProvider(this);
		}

		return timerItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.Transaction} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected TransactionItemProvider transactionItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.Transaction}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createTransactionAdapter() {
		if (transactionItemProvider == null) {
			transactionItemProvider = new TransactionItemProvider(this);
		}

		return transactionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.User} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected UserItemProvider userItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.User}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createUserAdapter() {
		if (userItemProvider == null) {
			userItemProvider = new UserItemProvider(this);
		}

		return userItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link bpmn.WebService} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected WebServiceItemProvider webServiceItemProvider;

	/**
	 * This creates an adapter for a {@link bpmn.WebService}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createWebServiceAdapter() {
		if (webServiceItemProvider == null) {
			webServiceItemProvider = new WebServiceItemProvider(this);
		}

		return webServiceItemProvider;
	}

	/**
	 * This returns the root adapter factory that contains this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ComposeableAdapterFactory getRootAdapterFactory() {
		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
	}

	/**
	 * This sets the composed adapter factory that contains this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
		this.parentAdapterFactory = parentAdapterFactory;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean isFactoryForType(Object type) {
		return supportedTypes.contains(type) || super.isFactoryForType(type);
	}

	/**
	 * This implementation substitutes the factory itself as the key for the adapter.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter adapt(Notifier notifier, Object type) {
		return super.adapt(notifier, this);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object adapt(Object object, Object type) {
		if (isFactoryForType(type)) {
			Object adapter = super.adapt(object, type);
			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
				return adapter;
			}
		}

		return null;
	}

	/**
	 * This adds a listener.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void addListener(INotifyChangedListener notifyChangedListener) {
		changeNotifier.addListener(notifyChangedListener);
	}

	/**
	 * This removes a listener.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void removeListener(INotifyChangedListener notifyChangedListener) {
		changeNotifier.removeListener(notifyChangedListener);
	}

	/**
	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void fireNotifyChanged(Notification notification) {
		changeNotifier.fireNotifyChanged(notification);

		if (parentAdapterFactory != null) {
			parentAdapterFactory.fireNotifyChanged(notification);
		}
	}

	/**
	 * This disposes all of the item providers created by this factory. 
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void dispose() {
		if (adHocProcessItemProvider != null) adHocProcessItemProvider.dispose();
		if (annotationItemProvider != null) annotationItemProvider.dispose();
		if (artifactInputItemProvider != null) artifactInputItemProvider.dispose();
		if (artifactOutputItemProvider != null) artifactOutputItemProvider.dispose();
		if (assignmentItemProvider != null) assignmentItemProvider.dispose();
		if (associationItemProvider != null) associationItemProvider.dispose();
		if (businessProcessDiagramItemProvider != null) businessProcessDiagramItemProvider.dispose();
		if (cancelItemProvider != null) cancelItemProvider.dispose();
		if (categoryItemProvider != null) categoryItemProvider.dispose();
		if (compensateItemProvider != null) compensateItemProvider.dispose();
		if (complexItemProvider != null) complexItemProvider.dispose();
		if (conditionItemProvider != null) conditionItemProvider.dispose();
		if (conditionalItemProvider != null) conditionalItemProvider.dispose();
		if (dataBasedItemProvider != null) dataBasedItemProvider.dispose();
		if (dataObjectItemProvider != null) dataObjectItemProvider.dispose();
		if (embeddedItemProvider != null) embeddedItemProvider.dispose();
		if (endItemProvider != null) endItemProvider.dispose();
		if (entityItemProvider != null) entityItemProvider.dispose();
		if (errorItemProvider != null) errorItemProvider.dispose();
		if (eventBasedItemProvider != null) eventBasedItemProvider.dispose();
		if (exclusiveItemProvider != null) exclusiveItemProvider.dispose();
		if (expressionItemProvider != null) expressionItemProvider.dispose();
		if (gateItemProvider != null) gateItemProvider.dispose();
		if (groupItemProvider != null) groupItemProvider.dispose();
		if (inclusiveItemProvider != null) inclusiveItemProvider.dispose();
		if (inputSetItemProvider != null) inputSetItemProvider.dispose();
		if (intermediateItemProvider != null) intermediateItemProvider.dispose();
		if (laneItemProvider != null) laneItemProvider.dispose();
		if (linkItemProvider != null) linkItemProvider.dispose();
		if (manualItemProvider != null) manualItemProvider.dispose();
		if (messageEventItemProvider != null) messageEventItemProvider.dispose();
		if (messageItemProvider != null) messageItemProvider.dispose();
		if (messageFlowItemProvider != null) messageFlowItemProvider.dispose();
		if (multiInstanceLoopActivityItemProvider != null) multiInstanceLoopActivityItemProvider.dispose();
		if (noneItemProvider != null) noneItemProvider.dispose();
		if (outputSetItemProvider != null) outputSetItemProvider.dispose();
		if (parallelItemProvider != null) parallelItemProvider.dispose();
		if (participantItemProvider != null) participantItemProvider.dispose();
		if (poolItemProvider != null) poolItemProvider.dispose();
		if (processItemProvider != null) processItemProvider.dispose();
		if (propertyItemProvider != null) propertyItemProvider.dispose();
		if (receiveItemProvider != null) receiveItemProvider.dispose();
		if (referenceSubProcessItemProvider != null) referenceSubProcessItemProvider.dispose();
		if (referenceTaskItemProvider != null) referenceTaskItemProvider.dispose();
		if (reusableItemProvider != null) reusableItemProvider.dispose();
		if (roleItemProvider != null) roleItemProvider.dispose();
		if (scriptItemProvider != null) scriptItemProvider.dispose();
		if (sendItemProvider != null) sendItemProvider.dispose();
		if (sequenceFlowItemProvider != null) sequenceFlowItemProvider.dispose();
		if (serviceItemProvider != null) serviceItemProvider.dispose();
		if (signalItemProvider != null) signalItemProvider.dispose();
		if (standardLoopActivityItemProvider != null) standardLoopActivityItemProvider.dispose();
		if (startItemProvider != null) startItemProvider.dispose();
		if (subProcessItemProvider != null) subProcessItemProvider.dispose();
		if (taskItemProvider != null) taskItemProvider.dispose();
		if (terminateItemProvider != null) terminateItemProvider.dispose();
		if (timeDateExpressionItemProvider != null) timeDateExpressionItemProvider.dispose();
		if (timerItemProvider != null) timerItemProvider.dispose();
		if (transactionItemProvider != null) transactionItemProvider.dispose();
		if (userItemProvider != null) userItemProvider.dispose();
		if (webServiceItemProvider != null) webServiceItemProvider.dispose();
	}

}
